import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import base64


def send_email(receiver, subject, body_text):
    """
    发送邮件的函数
    :param receiver: 收件人邮箱地址
    :param subject: 邮件主题
    :param body_text: 邮件正文（纯文本）
    """
    # 邮件服务器配置
    smtp_server = 'smtp.qq.com'  # SMTP 服务器地址
    smtp_port = 587  # SMTP 端口（通常为 587 或 465）
    smtp_user = '10504139@qq.com'  # 发件人邮箱
    smtp_password = 'crcjimzoeqjrcaba'  # 发件人邮箱密码（授权码）

    # 邮件内容
    sender = '10504139@qq.com'  # 发件人邮箱

    # 发件人昵称（可选，支持非 ASCII 字符）
    sender_name = "酷酷的"  # 如果昵称包含非 ASCII 字符，需要编码

    # 如果昵称包含非 ASCII 字符，使用 base64 编码
    if not sender_name.isascii():
        sender_name = f"=?UTF-8?B?{base64.b64encode(sender_name.encode('utf-8')).decode('utf-8')}?="

    # 创建邮件对象
    msg = MIMEMultipart()
    msg['From'] = f"{sender_name} <{sender}>"  # 格式化 From 标头
    msg['To'] = Header(receiver, 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')

    # 邮件正文（纯文本）
    text = MIMEText(body_text, 'html', 'utf-8')
    msg.attach(text)

    try:
        # 连接到 SMTP 服务器
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 启用 TLS 加密
        server.login(smtp_user, smtp_password)  # 登录邮箱
        server.sendmail(sender, [receiver], msg.as_string())  # 发送邮件
        server.quit()  # 关闭连接
        print("邮件发送成功！")
        return True
    except smtplib.SMTPException as e:
        print("邮件发送失败：", e)
        return False


def test_send_email():
    """
    测试邮件发送功能
    """
    # 邮件服务器配置
    # smtp_server = 'smtp.qq.com'  # SMTP 服务器地址
    # smtp_port = 587  # SMTP 端口（通常为 587 或 465）
    # smtp_user = '10504139@qq.com'  # 发件人邮箱
    # smtp_password = 'crcjimzoeqjrcaba'  # 发件人邮箱密码（授权码）

    # 邮件内容
    # sender = '10504139@qq.com'  # 发件人邮箱
    receiver = 'mantis_s@126.com'  # 收件人邮箱
    subject = '验证码'  # 邮件主题
    body_text = '这是一封测试邮件，发送于 Python 脚本。'  # 邮件正文

    # 调用发送邮件函数
    result = send_email(receiver, subject, body_text)
    if result:
        print("测试成功！")
    else:
        print("测试失败！")


# 运行测试方法
if __name__ == "__main__":
    test_send_email()